home *** CD-ROM | disk | FTP | other *** search
/ Gigantic Games 2 / Gigantic Games 2.iso / pc / _a_ / abitur / txt / initialisierespieler.mod < prev    next >
Text File  |  1994-12-23  |  6KB  |  235 lines

  1. IMPLEMENTATION MODULE InitialisiereSpieler;
  2.  
  3.  
  4. FROM AbiturScreen IMPORT weisS, AddAbiTxtLin, ShowAbiTxt;
  5. FROM Menus IMPORT RefreshSpielerMenu, CH;
  6. FROM Arts IMPORT TermProcedure, Assert;
  7. FROM Exec IMPORT FreeMem, MemReqSet, MemReqs, AllocMem;
  8. FROM RandomNoten IMPORT RNDNote;
  9. FROM IntuFrage IMPORT IntuFrag;
  10. FROM Fragen IMPORT Frage, FragePtr, SchuelerAntwort;
  11. FROM Str IMPORT Copy, Length;
  12. FROM Globals IMPORT AlleSpieler, AnzahlSpieler, Noten, SpielerPtr, Spieler,
  13.                     FindSpieler;
  14. FROM FaecherNamen IMPORT FaecherTypen;
  15. FROM SYSTEM IMPORT ADR;
  16. FROM Intuition IMPORT IntuiTextPtr, WindowPtr;
  17. FROM Graphics IMPORT Move, Text, SetAPen;
  18. FROM BerechneSchnitt IMPORT BerechneSchnitt;
  19.  
  20.  
  21. PROCEDURE InitRNDVornote(VAR V: Noten);
  22. VAR i: FaecherTypen;
  23. BEGIN
  24.    FOR i := Turnen TO Informatik DO
  25.       V[i] := RNDNote()
  26.    END
  27. END InitRNDVornote;
  28.  
  29.  
  30.  
  31. PROCEDURE ClearNoten(VAR N: Noten);
  32. VAR i: FaecherTypen;
  33. BEGIN
  34.    FOR i := Turnen TO Informatik DO
  35.       N[i] := 0.0
  36.    END
  37. END ClearNoten;
  38.  
  39.  
  40. PROCEDURE GetNextPlayerName(VAR S: ARRAY OF CHAR): BOOLEAN;
  41. VAR Fr: Frage;
  42.     MyAnt: SchuelerAntwort;
  43.     i: INTEGER;
  44.     W: WindowPtr;
  45. BEGIN (* TEst *)
  46.  
  47.    Fr.Next := NIL;
  48.  
  49.    Copy(Fr.Txt[0], "Name des Schülers");
  50.    FOR i := 1 TO 10 DO
  51.       Fr.Txt[i][0] := 0C
  52.    END;
  53.    Copy(Fr.MultipleAntw[1], "Fertig");
  54.    FOR i := 2 TO 6 DO
  55.       Fr.MultipleAntw[i][0] := 0C
  56.    END;
  57.  
  58.    REPEAT
  59.       IntuFrag(ADR(Fr), MyAnt);
  60.       Copy(S, MyAnt.Str)
  61.    UNTIL (Length(MyAnt.Str)#0) OR (0 IN MyAnt.Mul);
  62.  
  63.    IF (Length(MyAnt.Str) # 0) AND (0 IN MyAnt.Mul) THEN
  64.       AddAbiTxtLin("Zum beenden 'Fertig' an-");
  65.       AddAbiTxtLin("wählen und keinen Namen");
  66.       AddAbiTxtLin("mehr eingeben! Dann (OK)!");
  67.       ShowAbiTxt(weisS)
  68.    END;
  69.  
  70.    (* String abhacken, falls zu lang: *)
  71.    S[13] := 0C;
  72.    RETURN NOT ( (0 IN MyAnt.Mul) AND (Length(MyAnt.Str) = 0) )
  73. END GetNextPlayerName;
  74.  
  75.  
  76.  
  77. PROCEDURE FreeAllPlayers;
  78. VAR Temp : SpielerPtr;
  79. BEGIN
  80.    WHILE AlleSpieler # NIL DO
  81.       Temp := AlleSpieler;
  82.       AlleSpieler := AlleSpieler^.Next;
  83.       FreeMem(Temp, SIZE(Spieler))
  84.    END;
  85.    AnzahlSpieler := 0
  86. END FreeAllPlayers;
  87.  
  88.  
  89. PROCEDURE WritePsstText(h: INTEGER);
  90. VAR W: WindowPtr;
  91.     S: SpielerPtr;
  92. BEGIN
  93.    S := FindSpieler(h);
  94.    AddAbiTxtLin("Psst! Hey");
  95.    AddAbiTxtLin(S^.Name);
  96.    AddAbiTxtLin("komm mal alleine");
  97.    AddAbiTxtLin("her!");
  98.    ShowAbiTxt(weisS)
  99. END WritePsstText;
  100.  
  101.  
  102.  
  103. PROCEDURE AddSympNote(i, j :INTEGER);
  104. VAR Si, Sj: SpielerPtr;
  105.     Fr: Frage;
  106.     l: INTEGER;
  107.     Antw: SchuelerAntwort;
  108. BEGIN
  109.    Si := FindSpieler(i);
  110.    Sj := FindSpieler(j);
  111.    Fr.Next := NIL;
  112.    FOR l := 0 TO 10 DO
  113.       Fr.Txt[l][0] := 0C
  114.    END;
  115.    Copy(Fr.Txt[0], Si^.Name);
  116.    Copy(Fr.Txt[1], "gib Sympathienote");
  117.    Copy(Fr.Txt[2], "für");
  118.    Copy(Fr.Txt[3], Sj^.Name);
  119.    Copy(Fr.Txt[4], " !!! ");
  120.    FOR l := 1 TO 6 DO
  121.       Fr.MultipleAntw[l][0] := CHR(ORD("0") + l);
  122.       Fr.MultipleAntw[l][1] := 0C
  123.    END;
  124.    IntuFrag(ADR(Fr), Antw);
  125.    FOR i := 5 TO 0 BY -1 DO
  126.     IF CH() THEN
  127.       IF i IN Antw.Mul THEN
  128.          Sj^.SympathieNoteTurnen :=
  129.               Sj^.SympathieNoteTurnen + FLOAT(i + 1) /
  130.                                            FLOAT(AnzahlSpieler - 1);
  131.              (* AnzSp-1 > 0, da AddSympNote nur gerufen wird bei
  132.               * mehreren Spielern.
  133.               *)
  134.           RETURN
  135.       END
  136.     ELSE
  137.       IF i IN Antw.Mul THEN
  138.          Sj^.SympathieNoteTurnen :=
  139.               Sj^.SympathieNoteTurnen + FLOAT(6-i) /
  140.                                            FLOAT(AnzahlSpieler - 1);
  141.              (* AnzSp-1 > 0, da AddSympNote nur gerufen wird bei
  142.               * mehreren Spielern.
  143.               *)
  144.           RETURN
  145.       END
  146.     END
  147.    END;
  148.    Sj^.SympathieNoteTurnen := 3.5
  149. END AddSympNote;
  150.  
  151.  
  152.  
  153. PROCEDURE InitPlayers;
  154. VAR dummy : BOOLEAN;
  155.     i: FaecherTypen;
  156.     A,B,C: IntuiTextPtr;
  157.     NeuName: ARRAY[0..36] OF CHAR;
  158.     AktSpieler: SpielerPtr;
  159.     W,TextW: WindowPtr;
  160.     h,k:INTEGER;
  161. BEGIN
  162.    FreeAllPlayers;
  163.    AddAbiTxtLin("Alle Schüler(innen) geben ihren");
  164.    AddAbiTxtLin("Namen ein. Danach (RETURN).");
  165.    AddAbiTxtLin("Am Schluß: [Fertig] anwählen");
  166.    AddAbiTxtLin("und OK klicken.");
  167.    ShowAbiTxt(weisS);
  168.    REPEAT (* Bis mindestens ein Spieler dabei *)
  169.       WHILE (AnzahlSpieler < 20) AND GetNextPlayerName(NeuName) DO
  170.          AktSpieler := AllocMem(SIZE(Spieler), MemReqSet{public});
  171.          IF AktSpieler # NIL THEN
  172.             INC(AnzahlSpieler);
  173.             WITH AktSpieler^ DO
  174.                Next := AlleSpieler;
  175.                Copy(Name, NeuName);
  176.                Jahr := 0;
  177.                WITH Zeugnis DO
  178.                   InitRNDVornote(VorNote);
  179.                   ClearNoten(AktuelleSumme);
  180.                   ClearNoten(Schnitt);
  181.                   FOR i := Turnen TO Informatik DO
  182.                      AnzInSumme[i] := 0
  183.                   END;
  184.                   GesammtSchnitt := 0.0
  185.                END;
  186.                SympathieNoteTurnen := 0.0;
  187.                ErfahrungsNoteGs := Zeugnis.VorNote[Geschichte];
  188.                Absenzen := 0;
  189.                Provisorisch := 0
  190.             END; (* WITH *)
  191.             BerechneSchnitt(AktSpieler);
  192.             AlleSpieler := AktSpieler
  193.          ELSE
  194.             AddAbiTxtLin("Nicht mehr Spieler");
  195.             ShowAbiTxt(weisS)
  196.          END (* IF *)
  197.       END; (* WHILE *)
  198.       IF AnzahlSpieler = 0 THEN
  199.             AddAbiTxtLin("Brauche mindestens einen Schüler");
  200.             ShowAbiTxt(weisS)
  201.       END
  202.    UNTIL AnzahlSpieler > 0;
  203.    IF AnzahlSpieler >= 20 THEN
  204.       AddAbiTxtLin("Sorry, nur 20 Spieler!");
  205.       ShowAbiTxt(weisS)
  206.    END;
  207.    IF RefreshSpielerMenu() THEN END;
  208.  
  209.   (* Turnen Symathienote bestimmen *)
  210.    IF AnzahlSpieler > 1 THEN
  211.       FOR h := 1 TO AnzahlSpieler DO
  212.          WritePsstText(h);
  213.          FOR k := 1 TO AnzahlSpieler DO
  214.             IF h # k THEN
  215.                AddSympNote(h, k)
  216.                (* Spieler h gibt seine sympatischen Teil An Spieler k *)
  217.             END
  218.          END
  219.       END
  220.    ELSE
  221.       AlleSpieler^.SympathieNoteTurnen := RNDNote()
  222.    END
  223. END InitPlayers;
  224.  
  225.  
  226.  
  227.  
  228.  
  229. BEGIN
  230.  AlleSpieler := NIL;
  231.  
  232.  TermProcedure(FreeAllPlayers)
  233.  
  234. END InitialisiereSpieler.
  235.